package com.yunhe.dtu.util;

import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;


/**
 * @ClassName BigDecimalUtil
 * @Description  BigDecimal计算
 * @Author HeTao
 * @Date 2020/11/17 11:02
 * @Version 1.0
 **/
public class BigDecimalUtil {

	
	/**
	 * 
	 * @param value
	 * @return
	 */
	public static BigDecimal ifNullZero(BigDecimal value){
		return value==null?BigDecimal.ZERO:value;
	}

	/**
	 *  多加  null值转成0
	 * @return 两个参数的和
	
	 */
	public static BigDecimal add(BigDecimal a,BigDecimal... bArr) {
		BigDecimal sum=ifNullZero(a);
		for(BigDecimal b:bArr){
		  sum=sum.add(ifNullZero(b));
		}
		return sum;
	}
	/**
	 * 多减    null值转成0
	 * @return 两个参数的差
	 */
	public static BigDecimal sub(BigDecimal a, BigDecimal... bArr) {
		BigDecimal sub=ifNullZero(a);
		for(BigDecimal b:bArr){
			sub=sub.subtract(ifNullZero(b));
		}
		return sub;
	}
	

	/**
	 * 提供精确乘法运算的mul方法
	 *
	 * @return 两个参数的积
	 */
	public static double mul(double value1, double value2) {
		BigDecimal b1 = BigDecimal.valueOf(value1);
		BigDecimal b2 = BigDecimal.valueOf(value2);
		return b1.multiply(b2).doubleValue();
	}

	/**
	 * 多乘    null值转0
	 * @return 两个参数的乘积
	 * @throws IllegalAccessException
	 */
	public static BigDecimal mul(BigDecimal a, BigDecimal... bArray) {
		BigDecimal result = ifNullZero(a);
		for (BigDecimal b : bArray) {
			result = result.multiply(ifNullZero(b));
		}
		return result;
	}
	
	/**
	 * 多乘    null值转0
	 * @return 两个参数的乘积
	 * @throws IllegalAccessException
	 */
	public static BigDecimal mul( int scale , BigDecimal a, BigDecimal... bArray) {
		BigDecimal result = ifNullZero(a);
		for (BigDecimal b : bArray) {
			result = result.multiply(ifNullZero(b));
		}
		return result.setScale(scale,RoundingMode.HALF_UP);
	}

	
	/**
	 * 除发现null值直接返回零
	 * @return 两个参数的商
	 * @throws IllegalAccessException
	 */
	public static BigDecimal div(BigDecimal a, BigDecimal b,int scale) {
		if (b == null || b.doubleValue() == 0) {
			return null;
		}
		return ifNullZero(a).divide(b, MathContext.DECIMAL64).setScale(scale,RoundingMode.HALF_UP);
	}

	
	/**
	 * 各种格式转bigdecimal   null返回null
	 * @param convertObj
	 * @return
	 */
	public static BigDecimal convert(Object  convertObj){
		if (convertObj == null) {
			return null;
		}
		if (convertObj instanceof String) {
			return new BigDecimal((String)convertObj);
		} else if (convertObj instanceof Double ) {
			return BigDecimal.valueOf((double)convertObj);
		}else if(convertObj instanceof Long){
			return BigDecimal.valueOf((Long)convertObj);
		}else if(convertObj instanceof Integer){
			return BigDecimal.valueOf((Integer)convertObj);
		}else {
			return (BigDecimal) convertObj;
		}
	}
	




	
	
	

	
	
	
	
}
